import re
from loguru import logger
from Common import handle_gen_data
from Common.global_data import GlobalData


def replace_mark_by_data(origin_str):
    """
    我们的占位符表达式：#变量名#
    我们的数据源：一是全局变量类GlobalData, 二是handle_gen_data.py文件中的函数
    注意了：数据源必须是字符串
    :param origin_str: 从excel当中读取出来的数据
    :return: 完全替换之后数据。
    """
    logger.info("进行替换操作....")
    # 从字符串里面，找到匹配条件的所有子字符串
    result = re.findall("#(\w+)#", origin_str)
    if result:
        to_be_replaced_marks = list(set(result))
        logger.info(f"提取到的占位符有： {to_be_replaced_marks}")
    else:
        logger.info("没有占位符....")
        return origin_str

    # 第二步：遍历占位符，从数据源处获取匹配的数据，
    for mark in to_be_replaced_marks:
        logger.info(f"当前要替换的占位符是：{mark}")
        # 首先，从全局变量去匹配，匹配到了就替换
        if hasattr(GlobalData, mark):
            origin_str = origin_str.replace(f"#{mark}#", getattr(GlobalData, mark))
            logger.info(f"在全局变量当中找到了...全局变量{mark}的值为：{getattr(GlobalData, mark)}")
        else:
            # 全局变量里面没有mark，那就从自己写的生成数据的函数里面去找
            if hasattr(handle_gen_data, mark):
                # 调用对应的函数，得到具体的值
                value = getattr(handle_gen_data, mark)()
                origin_str = origin_str.replace(f"#{mark}#", value)
                logger.info(f"在生成数据的函数当中找到了...{mark}函数调用的返回为：{value}")
            else:
                logger.info("占位符对应的数据没找到，请检查。。。。。")

    # 返回全部替换完成的字符串
    return origin_str